from langchain.prompts import StringPromptTemplate
from pydantic import BaseModel, field_validator
class sqlPromptTemplate(StringPromptTemplate):
    """
    sql模板：{
    format()函数：返回sql类型的prompt
    }
    """
    input_variables: list[str] = ["table_structures","database_type", "constraints", "output_example" ,"error_code"]

        def format(self,**kwargs)->str:
        prompt =f"""
# 任务描述
你是一名资深MySQL工程师，需要解决用户遇到的数据库错误，并提供可直接执行的修复代码：

# 上下文信息:
1. 数据库表结构（如有）：
{get_table_struct()}  # 例如：用户提供的表名、字段名、字段类型、主键外键关系等

2. 数据库类型（如有）：
{get_database_type()}  # 例如：MySQL、PostgreSQL、SQL Server、Oracle等，默认兼容标准SQL


# 具体要求
1. 内容要求：
   - 先分析错误原因（需说明字段长度与输入长度的冲突）
   - 提供2种解决方案（不修改表结构/修改表结构）
   - 代码需包含注释，说明作用
2. 格式要求：
   - 分“错误原因”“解决方案1”“解决方案2”三个标题
   - SQL代码用```sql包裹
3. 风格要求：简洁专业，避免冗余解释
        """
        return prompt


if __name__ == '__main__':
    a1 = """CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT PRIMARY KEY,
        username VARCHAR(50) NOT NULL UNIQUE,  -- 用户名，最长50字符，唯一
        email VARCHAR(100) NOT NULL UNIQUE,   -- 邮箱，最长100字符，唯一
        age TINYINT UNSIGNED,                 -- 年龄，无符号 tinyint (0-255)
    );"""
    error_code = """INSERT INTO users (username, email, age)
    VALUES ("Alexander Constantine Leopold Wolfgang Maximilian Sebastian Ezekiel Nathaniel Theophilus Benedictus Reginald Percival", "2012@qq.com", 18)"""
    # prompt = sqlPromptTemplate().format(table_structures=a1, database_type="Mysql",
    #                                     user_question="在执行完代码后出现错误码‘1406 (22001): Data too long for column 'username' at row 1’",
    #                                     error_code=error_code)
    sql = sqlPromptTemplate()
    prompt = sql.format()
    print(prompt)